using System;
using System.DirectoryServices;
using System.Net.Mail;

namespace Pegasus.DirectoryServices
{
	/// <summary>
	/// 
	/// </summary>
	public class DirectoryUser : DirectoryObject
	{
		/// <summary>
		/// Initializes a new instance of the <see cref="T:DirectoryUser"/> class.
		/// </summary>
		internal DirectoryUser( DirectoryEntry entry )
		{
			AttachDirectoryEntry( entry );
		}

		/// <summary>
		/// Gets the users name.
		/// </summary>
		/// <value>The name.</value>
		public string Name
		{
			get
			{
				return GetStringProperty( "name" );
			}
		}

		/// <summary>
		/// Gets the description / title of this user.
		/// </summary>
		/// <value>The name.</value>
		public string Description
		{
			get
			{
				return GetStringProperty( "title" );
			}
		}

		/// <summary>
		/// Gets the username.
		/// </summary>
		/// <value>The username.</value>
		public string Username
		{
			get
			{
				return GetStringProperty( "sAMAccountName" );
			}
		}

		/// <summary>
		/// Gets the name of the user principal.
		/// </summary>
		/// <value>The name of the user principal.</value>
		public string UserPrincipalName
		{
			get
			{
				return GetStringProperty( "userPrincipalName" );
			}
		}

		/// <summary>
		/// Gets the user email address.
		/// </summary>
		/// <value>The mail address.</value>
		public MailAddress MailAddress
		{
			get
			{
				string email = GetStringProperty( "mail" );
				if( email != null && email.Length > 0 )
				{
					return new MailAddress( email, GetStringProperty( "name" ) );
				}

				return null;
			}
		}

		/// <summary>
		/// Gets the name of the LDAP distinguished.
		/// </summary>
		/// <value>The name of the LDAP distinguished.</value>
		public string LdapDistinguishedName
		{
			get
			{
				return GetStringProperty( "distinguishedName" );
			}
		}
	}
}
